﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Kinect;

namespace KinectPowerPointControl_sample1_Fukidashi
{
    static class ProcesSurrenderGesture
    {
        private static long lastActivated = 0; //最後にこのジェスチャーが発生したタイミング（100ナノ秒単位のtickで保持）
        private static long SLEEP_TIME = 10 * 1000 * 1000 * 10; //発動後、発動を抑える時間

        public static bool hasSurrendered(LinkedList<SkeletonLog> skeletonLogs)
        {
            if (DateTime.Now.Ticks - lastActivated > SLEEP_TIME) { lastActivated = 0; } //発動後、発動を抑える時間が経過した場合
            if (skeletonLogs.Count < 19 ||   //直近5.4秒の断面が存在しない場合
                lastActivated > 0)          //発動後、発動を抑える時間が経過した場合
            {
                return false; 
            }

            LinkedList<SkeletonLog>.Enumerator e = skeletonLogs.GetEnumerator();

            //以下を満たすか
            //ここ5.4秒の間、ずっとHandRight/HandLeft（両手）がShoulder（肩）より上にある

            for (int i = 0; i < 18; i++)
            {
                if (!e.MoveNext()) { return false; }
                if (e.Current.joints[JointType.HandRight].Position.Y < e.Current.joints[JointType.ShoulderCenter].Position.Y ||
                    e.Current.joints[JointType.HandLeft].Position.Y < e.Current.joints[JointType.ShoulderCenter].Position.Y){
                        return false;
                    }
            }

            lastActivated = DateTime.Now.Ticks;
            return true;
        }

    }

}
